package com.bedpotato.musicplayerproxy.utils;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

import android.os.StatFs;

import com.bedpotato.musicplayerproxy.Constants;

public class ProxyUtils {
	private static final String LOG_TAG = ProxyUtils.class.getSimpleName();

	/**
	 * 删除多余的缓存文件
	 * 
	 * @param dirPath
	 *            缓存文件的文件夹路径
	 * @param maximun
	 *            缓存文件的最大数量
	 */
	static protected void asynRemoveBufferFile(final int maximun) {
		new Thread() {
			public void run() {
				List<File> lstBufferFile = getFilesSortByDate(Constants.DOWNLOAD_PATH);
				while (lstBufferFile.size() > maximun) {
					lstBufferFile.get(0).delete();
					lstBufferFile.remove(0);
				}
			}
		}.start();
	}

	/**
	 * 获取外部存储器可用的空间
	 * 
	 * @return
	 */
	static protected long getAvailaleSize(String dir) {
		StatFs stat = new StatFs(dir);// path.getPath());
		long totalBlocks = stat.getBlockCount();// 获取block数量
		long blockSize = stat.getBlockSize();
		long availableBlocks = stat.getAvailableBlocks();
		return availableBlocks * blockSize; // 获取可用大小
	}

	/**
	 * 获取文件夹内的文件，按日期排序，从旧到新
	 * 
	 * @param dirPath
	 * @return
	 */
	static private List<File> getFilesSortByDate(String dirPath) {
		List<File> result = new ArrayList<File>();
		File dir = new File(dirPath);
		File[] files = dir.listFiles();
		if (files == null || files.length == 0)
			return result;

		Arrays.sort(files, new Comparator<File>() {
			public int compare(File f1, File f2) {
				return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
			}
		});

		for (int i = 0; i < files.length; i++) {
			result.add(files[i]);
		}
		return result;
	}

	public static String getExceptionMessage(Exception ex) {
		String result = "";
		StackTraceElement[] stes = ex.getStackTrace();
		for (int i = 0; i < stes.length; i++) {
			result = result + stes[i].getClassName() + "." + stes[i].getMethodName() + "  " + stes[i].getLineNumber()
					+ "line" + "\r\n";
		}
		return result;
	}

}
